/*************************************************************************************
 *	模块名称 : TCP模块头文件
 *	文件名称 : mytcp.h
 *	版   本 : V1.0
 *	说   明 : 本文件包含了对 TCP服务器 和 TCP客户端 的常用操作的 封装函数的声明.
 *	修改记录 :
 *		     版本号       日期         作者        说明
 *	         V1.0     2022-06-19      YT        发布
 *
 *	Copyright (C), 2022-2030, Zhirui
 *************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>

#ifndef MY_TCP_H
#define MY_TCP_H

#define LISTEN_NUM 10

/**************************************************************************
 * 函数名称: TcpServerInit  
 * 函数说明: TCP服务器初始化: 建立连接套接字, 绑定服务器IP+端口, 建立监听客户端队列   
 * 参   数:  strServerIp  待绑定的 本机TCP服务器IP (点分十进制 ) 
 *          ServerPort   待绑定的 本地TCP服务器 端口号
 * 返回值 :   0 初始化成功, 同时生成有效的监听套接字, 保存在静态全局变量 gs_ListenSockFd 中
 *          -1 初始化失败          
 *************************************************************************/
extern int TcpServerInit( const char strServerIp[], int ServerPort );

/**************************************************************************
 * 函数名称: TcpServerAccept  
 * 函数说明: TCP服务器阻塞等待 TCP客户端 的连接请求, 如果成功连接则返回   
 * 参   数:  strClintIp  保存 成功连接的 TCP客户端IP (点分十进制 ) 的地址
 *                       如果不关心 TCP客户端IP, 则传入 NULL 
 *          pClintPort  保存 成功连接的 TCP客户端 端口号 的地址
 *                       如果不关心 TCP客户端端口, 则传入 NULL
 * 返回值 :   0 连接成功, 
 *               生成有效的 连接套接字, 保存在 *pConnectSockFd 中
 *               返回 TCP客户端 IP
 *               返回 TCP客户端 端口
 *          -1 初始化失败          
 *************************************************************************/
extern int TcpServerAccept( int *pConnectSockFd, char strClintIp[], int *pClintPort );

/**************************************************************************
 * 函数名称: TcpServerClose  
 * 函数说明: 关闭 服务器监听套接字, 不再接收 TCP客户端的连接请求.   
 * 参   数:  无
 * 返回值 :   0 关闭成功, 
 *          -1 关闭失败          
 *************************************************************************/
extern int TcpServerClose( void );

/**************************************************************************
 * 函数名称: TcpClintConnet  
 * 函数说明: TCP客户端 向 TCP服务器 发起连接请求   
 * 参   数:  pCnnectSockFd, 保存生成的 客户端连接套接字 的地址
 *          strServerIp  TCP服务器IP (点分十进制 ) 的地址
 *          ServerPort   TCP服务器 端口号 的地址
 * 返回值 :   0 连接成功, 
 *               生成有效的 客户端连接套接字, 保存在 *pConnectSockFd 中
 *          -1 初始化失败          
 *************************************************************************/
extern int TcpClintConnect( int *pConnectSockFd, const char strServerIp[], int ServerPort );

#endif